#include<bits/stdc++.h>
using namespace std;
const int N=100010;
struct node
{
    int left,mid,r,c;
}a[N];
int n,rr[N],ans,m;
bool cmp(node x,node y)
{
    return x.r<y.r;
}
void memst(int ll,int rr)
{
    for(int i=ll;i<rr;i++)
        a[i].left=0,a[i].mid=0,a[i].c=0;
}
void memst1(int ll,int rr)
{
    for(int i=ll;i<=rr;i++)
    {
        if(a[i].c<=a[rr].mid&&a[i].c>=0)
            a[rr].mid-=a[i].c,a[i].c=0,a[i].left=0;
        else if(a[i].c-a[rr].mid>=0)
        {
            a[i].c-=a[rr].mid;
        }
    }
}
int main()
{
    freopen("duel.in","r",stdin);
    freopen("duel.out","w",stdout);
    scanf("%d",&n);
    ans=n;
    for(int i=1;i<=n;i++)
        cin>>rr[i];
    sort(rr+1,rr+n+1);
    for(int i=1;i<=n;i++)
    {
        if(rr[i]!=rr[i-1]) m++;
        a[m].r=rr[i];
        a[m].mid++;
        a[m].c++;
    }
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++)
        a[i].left=a[i-1].left+a[i-1].mid;
    for(int i=1;i<=m;i++)
    {
        a[i].left=a[i-1].left+a[i-1].c;
        if(a[i].left<=a[i].mid&&a[i].left>=0)
        {
            ans-=a[i].left;
            a[i].mid-=a[i].left;
            a[i].left=0;
            memst(1,i);
        }
        else if(a[i].left>a[i].mid&&a[i].mid>=0)
        {
            ans-=a[i].c;
            a[i].left-=a[i].mid;
            memst1(1,i);
            a[i].mid=0;
        }
    }
    printf("%d\n",ans);
    return 0;
}
